package objetos.powerUps;

import juego.Escenario;
import movimiento.Posicion;
import movimiento.patrones.ZigZag;
import objetos.ObjetoNoControlado;
import objetos.aeronaves.Algo42;
import org.jdom.Element;
import vistas.FactoryVistas;
import ar.uba.fi.algo3.titiritero.ControladorJuego;
import ar.uba.fi.algo3.titiritero.vista.Imagen;
import auxiliares.Vector;

/*
 * Clase que modela las caracter�sticas b�sicas de los power up. Todos los power up
 * deben heredar de �sta.
 */
public abstract class PowerUp extends ObjetoNoControlado {

	@Override
	public void retornarAlCombate() {
		/*
		 * Al irse un poco m�s alla de la pantalla los proyectiles son
		 * destruidos.
		 */
		int y = this.getPosicion().getEnY();
		int maxY = Escenario.getInstance().getMaxY();
		if (y < 0 || y > maxY) {
			this.destruir();
		}
	}

	public PowerUp(int x, int y) {
		this.setPosicion(new Posicion(x, y));
		this.setTamanio(10);
		this.setVelocidad(new Vector(2, 1));
		setPatron(new ZigZag());
	}

	public PowerUp(Posicion posicion) {
		this(posicion.getEnX(), posicion.getEnY());
	}

	public abstract void darBeneficioA(Algo42 algo42);

	@Override
	public void colisionConAlgo42(Algo42 algo42) {
		this.destruir();
		this.darBeneficioA(algo42);
	}

	@Override
	public Imagen darVista(ControladorJuego controlador) {
		return FactoryVistas.crearVista(this, controlador);
	}

	/* Persistencia */

	/* Constructor a partir de nodoXML */
	public PowerUp(Element nodo) {

	}

	/* NodoXML a partir de instancia */
	@Override
	public Element obtenerNodo() {
		Element nodo = new Element("powerUp");

		return nodo;
	}

}
